1project('a', 'c')
2
3good = declare_dependency(link_with: static_library('good', 'g.c'))
4bad = declare_dependency(link_args: 'nonexistent.a')
5not_found = dependency('invalid', required: false)
6
7source_set = import('sourceset')
8
9sources = source_set.source_set()
10sources.add(when: 'YES',  if_false: ['nope.c'])
11sources.add(when: 'YES1', if_true: files('a.c'))
12subdir('subdir')
13sources.add(when: 'NO',   if_true: 'nope.c', if_false: ['f.c'])
14sources.add(when: 'NO',   if_true: bad,      if_false: ['f.c'])
15
16sources.add(when: 'YES2', if_true: good)
17
18# dependencies as conditions
19sources.add(when: not_found, if_true: 'nope.c')
20
21# test add_all
22sources2 = source_set.source_set()
23sources2.add(when: 'YES1',  if_true: 'nope.c')
24sources.add_all(when: 'NO', if_true: sources2)
25
26# test duplicate items
27sources.add(when: 'YES1',   if_true: files('a.c'))
28
29conf1 = configuration_data()
30conf1.set10('YES', true)
31conf1.set10('YES1', true)
32conf1.set10('YES2', false)
33conf1.set10('NO', false)
34result1 = sources.apply(conf1)
35
36conf2 = configuration_data()
37conf2.set10('YES', true)
38conf2.set10('YES1', false)
39conf2.set10('YES2', true)
40conf2.set10('NO', false)
41result2 = sources.apply(conf2)
42
43# Each target will recompile the objects
44executable('first', sources: result1.sources(), dependencies: result1.dependencies())
45executable('second', sources: result2.sources(), dependencies: result2.dependencies())
46
47# All target will use the same object files
48if meson.is_unity()
49  message('Skipping extraction test because this is a Unity build.')
50else
51  all_objs = static_library('all_objs', sources.all_sources())
52  executable('first_via_lib', objects: all_objs.extract_objects(result1.sources()), dependencies: result1.dependencies())
53  executable('second_via_lib', objects: all_objs.extract_objects(result2.sources()), dependencies: result2.dependencies())
54endif
55